package com.app.utils;



import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.util.Log;

/**
 * 正则表达式帮助类
 *
 */
public class RegularHelper
{
	
	/**去掉所有空格
	 * @param string
	 * @return
	 */
	static public String removeAllSpace(String string)
	{
		if(string==null)
    		return "";
		return string.replaceAll("\\s*", "");
    	
	}
	
        static private boolean startCheck(String reg, String string) {
                boolean tem = false;
                Pattern pattern = Pattern.compile(reg);
                Matcher matcher = pattern.matcher(string);
                tem = matcher.matches();
                return tem;
        }

        /**
         * 检验整数,适用于正整数、负整数、0，负整数不能以-0开头, 正整数不能以0开头
         * 
         * */
        static public boolean checkNr(String nr) {
                String reg = "^(-?)[1-9]+\\d*|0";
                return startCheck(reg, nr);
        }
        
        static public boolean checkNumber(String string){
        	String reg ="^[1][3,4,5,7,8][0-9]{9}$";
        	return startCheck(reg, string);
        }

        /**
         * 检验空白符
         * */
        static public boolean checkWhiteLine(String line) {
                String regex = "(\\s|\\t|\\r)+";
                return startCheck(regex, line);
        }

        /**
         * 检查EMAIL地址 用户名和网站名称必须>=1位字符
         * 地址结尾必须是以com|cn|com|cn|net|org|gov|gov.cn|edu|edu.cn结尾
         * */
        static public boolean checkEmailWithSuffix(String email) {
                String regex = "\\w+\\@\\w+\\.(com|cn|com.cn|net|org|gov|gov.cn|edu|edu.cn)";

                return startCheck(regex, email);
        }

        /**
         * 检查EMAIL地址 用户名和网站名称必须>=1位字符 地址结尾必须是2位以上，如：cn,test,com,info
         * */
        static public boolean checkEmail(String email) {
//                String regex = "\\w+\\@\\w+\\.\\w{2,}";
        	String regex = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
                return startCheck(regex, email);
        }

        /**
         * 检查邮政编码(中国),6位，第一位必须是非0开头，其他5位数字为0-9
         * */
        static public boolean checkPostcode(String postCode) {
                String regex = "^[1-9]\\d{5}";
                return startCheck(regex, postCode);
        }
        
        static public boolean checkUsernameR1(String username){
        	String regex = "^[A-Za-z0-9_.@-]+$";
        	return startCheck(regex,username);
        }

        /**
         * 检验用户名 取值范围为a-z,A-Z,0-9,"_",汉字，不能以"_"结尾 用户名有最小长度和最大长度限制，比如用户名必须是4-20位
         * */
        static public boolean checkUsername(String username, int min, int max) {
                String regex = "[\\w\u4e00-\u9fa5]{" + min + "," + max + "}(?<!_)";
                return startCheck(regex, username);
        }

        /**
         * 检验用户名 取值范围为a-z,A-Z,0-9,"_",汉字，不能以"_"结尾 有最小位数限制的用户名，比如：用户名最少为4位字符
         * */
        static public boolean checkUsername(String username, int min) {
                // [\\w\u4e00-\u9fa5]{2,}?
                String regex = "[\\w\u4e00-\u9fa5]{" + min + ",}(?<!_)";

                return startCheck(regex, username);
        }

        /**
         * 检验用户名 取值范围为a-z,A-Z,0-9,"_",汉字 最少一位字符，最大字符位数无限制，不能以"_"结尾
         * */
        static public boolean checkUsername(String username) {
                String regex = "[\\w\u4e00-\u9fa5]+(?<!_)";
                return startCheck(regex, username);
        }
        
        /**
         * 检测密码有效性
         * @param passowrd
         * @param min
         * @param max
         * @return
         */
        static public boolean checkPassword(String passowrd,int min,int max){
        	//String regex = "^[a-zA-Z]w{"+min+","+max+ "}(?<!_)";
        	String regex = "^[-`=\\[\\];',./~!@#$%^&*()_+|{}:\"<>?A-Za-z0-9]{"+min+","+max+"}$";
        	return startCheck(regex, passowrd);
        }


    /**
     *更严格的手机号码正则表达式写法<br>
     *移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188<br>
     *联通：130、131、132、152、155、156、185、186<br>
     *电信：133、153、180、189、（1349卫通）<br>
     *
     * */
    public static boolean isMobileNO(String mobiles){
        String regex = "^((13[0-9])|(15[^4,\\D])|(18[1,0,2,5-9]))\\d{8}$";
        return startCheck(regex, mobiles);
    }
        /**
         * 查看IP地址是否合法
         * */
        static public boolean checkIP(String ipAddress) {
                String regex = "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\."
                                + "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\."
                                + "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\."
                                + "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])";

                return startCheck(regex, ipAddress);
        }

        /**
         * 验证国内电话号码 格式：010-67676767，区号长度3-4位，必须以"0"开头，号码是7-8位
         * */
        static public boolean checkPhoneNr(String phoneNr) {
                String regex = "^[0]\\d{2,3}\\-\\d{7,8}";

                return startCheck(regex, phoneNr);
        }

        /**
         * 验证国内电话号码 格式：6767676, 号码位数必须是7-8位,头一位不能是"0"
         * */
        static public boolean checkPhoneNrWithoutCode(String phoneNr) {
                String reg = "^[1-9]\\d{6,7}";

                return startCheck(reg, phoneNr);
        }

        /**
         * 验证国内电话号码 格式：0106767676，共11位或者12位，必须是0开头
         * */
        static public boolean checkPhoneNrWithoutLine(String phoneNr) {
                String reg = "^[0]\\d{10,11}";

                return startCheck(reg, phoneNr);
        }

        /**
         * 验证国内身份证号码：15或18位，由数字组成，不能以0开头
         * */
        static public boolean checkIdCard(String idNr) {
                String reg = "^[1-9](\\d{14}|\\d{17})";

                return startCheck(reg, idNr);
        }

        /**
         * 网址验证<br>
         * 符合类型：<br>
         * http://www.test.com<br>
         * http://163.com
         * */
        static public boolean checkWebSite(String url) {
                // http://www.163.com
                String reg = "^(http)\\://(\\w+\\.\\w+\\.\\w+|\\w+\\.\\w+)";

                return startCheck(reg, url);
        }
        
        /**只允许出现浮点数的样子
         * @param num
         * @return
         */
        static public boolean checkNum(String num)
        {
        	
        	  String numStr = "\\d*\\.{1}\\d{1}";

              return startCheck(numStr, num);
        	
        }
        static public boolean checkHTTP(String url) {
            String reg = "[http]+://[\\S]*";
            return startCheck(reg, url);
        }
        
        static public String getMaskString(String str,int start, int end){
        	
        	if(str==null)
        		return "";
        	StringBuffer strs = new StringBuffer(str);        	        
        	
        	if(end > strs.length())
        		end = strs.length();
        	
        	//strs.replace(start, end, "*");
        	
        	for(int i=0;i<strs.length();i++){
        		if(i>=start & i<end){
        			strs.setCharAt(i, '*');
        		}
        	}        	
        	return strs.toString();
        }
        
}